package exprarbre;

import java.util.HashMap;
import java.util.LinkedList;
import progarbre.ASAProg;

public class ASAListExpr extends ASAExpr {

    private LinkedList<ASAExpr> expressions;
    private int pointeur;

    public ASAListExpr() {
        this.expressions = new LinkedList<ASAExpr>();
    }

    public boolean add(ASAExpr expression) {
        return expressions.add(expression);
    }

    public int getNbExpr() {
        return expressions.size();
    }

    public void setPointeur(int p) {
        pointeur = p;
    }

    public void setValeurPointeur(int valeur) {
        ASAProg.set(pointeur, valeur);
    }

    @Override
    public void setPointeur(HashMap<String, Integer> affectation) {
        for (ASAExpr expression : expressions) {
            expression.setPointeur(affectation);
        }
    }

    @Override
    public int evalue() {
        int bottom = ASAProg.getBottom();
        int endContext = ASAProg.getEndContext();
        int addContext = 0;
        int index = 1;
        for (ASAExpr expression : expressions) {
            if (expression instanceof ASACall) {
                ASAProg.setBottom(bottom + index);
                ASAProg.setEndContext(ASAProg.getBottom() - 1);
                addContext++;
            }
            ASAProg.push(expression.evalue());
            index++;
        }
        ASAProg.setBottomUnsecure(bottom);
        ASAProg.setEndContext(endContext + addContext);
        return 0;
    }
}